home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) 1990,1991,1992 Chris and John Downey */
- #ifndef lint
- static char *sccsid = "@(#)signal.c 2.1 (Chris & John Downey) 7/29/92";
- #endif
-
- /***
-
- * program name:
- xvi
- * function:
- PD version of UNIX "vi" editor, with extensions.
- * module name:
- signal.c
- * module function:
- Signal handling routines.
-
- This is all fairly system-dependent, & may be replaced by more
- system-specific routines if required. On MS-DOS, for instance,
- this module isn't used at all: ignore_signals() &
- catch_signals() are defined in msdos_c.c & msdos_a.asm instead.
- * history:
- STEVIE - ST Editor for VI Enthusiasts, Version 3.10
- Originally by Tim Thompson (twitch!tjt)
- Extensive modifications by Tony Andrews (onecom!wldrdg!tony)
- Heavily modified by Chris & John Downey
-
- ***/
-
- #include "xvi.h"
-
- /*
- * Signal handlers.
- */
- #ifdef SIGINT
- static void int_handler P((int));
- #endif
- #ifdef SIGTSTP
- static void tstp_handler P((int));
- #endif
- #ifdef SIGHUP
- static void hup_handler P((int));
- #endif
- #ifdef SIGTERM
- static void term_handler P((int));
- #endif
-
- void
- ignore_signals()
- {
- #ifdef SIGINT
- (void) signal(SIGINT, SIG_IGN);
- #endif
- #ifdef SIGBREAK
- /*
- * On OS/2, this is generated by pressing control-break.
- */
- (void) signal(SIGBREAK, SIG_IGN);
- #endif
- #ifdef SIGQUIT
- (void) signal(SIGQUIT, SIG_IGN);
- #endif
- #ifdef SIGTSTP
- (void) signal(SIGTSTP, SIG_IGN);
- #endif
- /*
- * There isn't much point in catching or ignoring SIGHUP
- * signals until we have some modified buffers to preserve.
- */
- #ifdef SIGTERM
- (void) signal(SIGTERM, SIG_IGN);
- #endif
- }
-
- void
- catch_signals()
- {
- #ifdef SIGINT
- (void) signal(SIGINT, int_handler);
- #endif
- #ifdef SIGBREAK
- /*
- * On OS/2, this is generated by pressing control-break.
- */
- (void) signal(SIGBREAK, int_handler);
- #endif
- #ifdef SIGTSTP
- (void) signal(SIGTSTP, tstp_handler);
- #endif
- #ifdef SIGHUP
- (void) signal(SIGHUP, hup_handler);
- #endif
- #ifdef SIGTERM
- (void) signal(SIGTERM, term_handler);
- #endif
- }
-
- /*
- * Handler for SIGINT (keyboard interrupt).
- */
- #ifdef SIGINT
- static void
- int_handler(sig)
- int sig;
- {
- signal(SIGINT, int_handler);
- kbdintr = 1;
- }
- #endif
-
- /*
- * This function is used on UNIX as the signal handler
- * for the keyboard-generated TSTP signal.
- */
- #ifdef SIGTSTP
- static void
- tstp_handler(sig)
- int sig;
- {
- do_suspend(curwin);
- }
- #endif
-
- /*
- * This one is used for the hangup signal, which generally means that
- * the terminal line has gone dead. This means sys_exit() doesn't make
- * much sense, so we call exit() instead.
- */
- #ifdef SIGHUP
- static void
- hup_handler(sig)
- int sig;
- {
- signal(SIGHUP, SIG_IGN);
- /*
- * Make backup copies of all modified buffers.
- */
- (void) do_preserve();
- exit(0);
- }
- #endif
-
- /*
- * This one is used for the software-generated terminate signal.
- */
- #ifdef SIGTERM
- static void
- term_handler(sig)
- int sig;
- {
- signal(SIGTERM, SIG_IGN);
- /*
- * Make backup copies of all modified buffers.
- */
- (void) do_preserve();
- sys_exit(0);
- }
- #endif
-